package com.education.platform.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.education.platform.entity.Statistics;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

/**
 * 统计Mapper接口
 *
 * @author education-platform
 * @since 2024-09-27
 */
@Mapper
public interface StatisticsMapper extends BaseMapper<Statistics> {

    /**
     * 根据日期和类型查询统计
     */
    Statistics selectByDateAndType(@Param("statDate") LocalDate statDate, @Param("statType") String statType);

    /**
     * 查询日期范围内的统计
     */
    List<Statistics> selectByDateRange(@Param("statType") String statType, 
                                      @Param("startDate") LocalDate startDate, 
                                      @Param("endDate") LocalDate endDate);

    /**
     * 查询最新的统计
     */
    Statistics selectLatestByType(@Param("statType") String statType);

    /**
     * 批量插入或更新统计
     */
    void batchInsertOrUpdate(@Param("statistics") List<Statistics> statistics);

    /**
     * 统计总和
     */
    Long sumByTypeAndDateRange(@Param("statType") String statType, 
                              @Param("startDate") LocalDate startDate, 
                              @Param("endDate") LocalDate endDate);
    
    /**
     * 统计总用户数
     */
    Long countTotalUsers();
    
    /**
     * 统计总教员数
     */
    Long countTotalTeachers();
    
    /**
     * 统计总订单数
     */
    Long countTotalOrders();
    
    /**
     * 统计今日收入
     */
    java.math.BigDecimal sumTodayIncome();
    
    /**
     * 统计昨日收入
     */
    java.math.BigDecimal sumYesterdayIncome();
    
    /**
     * 按状态统计订单数量
     */
    Long countOrdersByStatus(@Param("status") String status);
    
    /**
     * 统计指定日期的用户增长数（按角色）
     */
    Long countUserGrowthByDate(@Param("date") LocalDate date, @Param("role") String role);
}

